package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.*;
import cn.wzut.edut.dao.pojo.table.*;
import cn.wzut.edut.jwt.JWTUtils;
import cn.wzut.edut.pojo.ClassInfo;
import cn.wzut.edut.pojo.ClassModInfo;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ClassService {

    @Autowired
    Information information;

    @Autowired
    ClassCollege classCollege;

    @Autowired
    ClientService clientService;

    /**
     * 获取全部班级列表
     * @param token
     * @return
     */
    public List<PtyClass> getClassList(String token){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            return classCollege.selectAllClass();
        }
        return null;
    }

    /**
     * 获取指定个数指定页的班级列表
     * @param token
     * @return
     */
    public List<PtyClass> getClassListByPage(String token, int page, int num){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            //获取列表
        }
        return null;
    }

    /**
     * 添加班级
     * @param token
     * @return
     */
    public boolean addClass(String token, ClassInfo classInfo){
        try {
            // 解析token
            DecodedJWT decode = JWTUtils.decode(token);
            // 判断是否是后台管理端发送的请求
            if (decode.getClaim("end").asString().equals("B")) {
                // 获取用户id
                String userId = decode.getClaim("userid").asString();
                // 判断用户是否拥有菜单8（班级管理）权限
                if (clientService.selectRole(userId, "8")) {
                    // 班级信息写入班级表
                    String id = classCollege.insertPtyClass(new PtyClass("1", classInfo.getClass_name()));
                    // 更新学生信息中的班级信息
                    if (classInfo.getStus() != null) {
                        for(PtyStu stu : classInfo.getStus()){
                            information.updatePtyStuClass(stu.getId(), id);
                        }
                    }
                }
            }
        }
        catch(Exception e){}
        return false;
    }

    /**
     * 删除班级
     * @param token
     * @return
     */
    public boolean delClass(String token, String[] classids) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单8（班级管理）权限
            if(clientService.selectRole(userId, "8")) {
                for(String classid : classids){
                    if(!classCollege.delPtyClass(classid)){
                        return false;
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 修改班级
     * @param token
     * @return
     */
    public boolean modClass(String token, ClassModInfo classModInfo) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单8（班级管理）权限
            if(clientService.selectRole(userId, "8")) {
                // 更新班级表信息
                classCollege.updatePtyClass(new PtyClass(classModInfo.getClass_id(), classModInfo.getClass_name()));
                // 更新添加学生信息
                if(classModInfo.getAdd_ids() != null) {
                    for (String add_id : classModInfo.getAdd_ids()) {
                        information.updatePtyStuClass(add_id, classModInfo.getClass_id());
                    }
                }
                // 更新删除学生信息
                if(classModInfo.getDel_ids() != null) {
                    for (String del_id : classModInfo.getDel_ids()) {
                        information.updatePtyStuClass(del_id, "0");
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 根据班级id查询班级信息
     * @param token
     * @return
     */
    public ClassInfo getClassById(String token, String classid) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单8（班级管理）权限
            if(clientService.selectRole(userId, "8")) {
                // 返回班级表数据和该班级下学生数据
                return new ClassInfo(classCollege.selectClass(classid).getClassName(), information.selectStuInClass(classid));
            }
        }
        return null;
    }

}
